package com.example.bridgemodule;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;

import com.alibaba.fastjson.JSONObject;

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

/**
 * UniBridgeModule是一个用于处理与UniApp交互的模块。
 * 该模块提供了拨打电话的功能。
 */
public class UniBridgeModule extends UniModule {

    private static final String TAG = "UniBridgeModule";

    /**
     * 拨打电话
     *
     * @param options  包含手机号码的JSONObject，例如 { "phoneNumber": "123456789" }
     * @param callback 回调函数，返回拨打结果
     */
    @UniJSMethod(uiThread = false)
    public void callPhone(JSONObject options, UniJSCallback callback) {
        String phoneNumber = "";

        try {
            // 从 options 中获取手机号码
            phoneNumber = options.getString("phoneNumber");

            // 检查手机号是否为空
            if (phoneNumber == null || phoneNumber.isEmpty()) {
                sendErrorResponse(callback, "手机号不能为空");
                return;
            }

            // 创建拨号 Intent
            Intent intent = new Intent(Intent.ACTION_DIAL);
            intent.setData(Uri.parse("tel:" + phoneNumber));
            Context context = this.mUniSDKInstance.getContext();
            context.startActivity(intent); // 启动拨号界面

            // 返回成功结果
            sendSuccessResponse(callback);

        } catch (Exception e) {
            Log.e(TAG, "拨打电话失败: ", e);
            sendErrorResponse(callback, "拨打电话失败: " + (e.getMessage() != null ? e.getMessage() : "未知错误"));
        }
    }

    /**
     * 发送成功响应
     *
     * @param callback 回调函数
     */
    private void sendSuccessResponse(UniJSCallback callback) {
        JSONObject data = new JSONObject();
        data.put("code", "success");
        callback.invoke(data);
    }

    /**
     * 发送错误响应
     *
     * @param callback 回调函数
     * @param message  错误信息
     */
    private void sendErrorResponse(UniJSCallback callback, String message) {
        JSONObject data = new JSONObject();
        data.put("code", "error");
        data.put("message", message);
        callback.invoke(data);
    }
}